﻿Public Class frmGestionClientes
    Dim utilidades As New Utilidades
    Dim _formPrincipal As frmPrincipal

    Private Sub frmGestionClientes_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        Dim myAccesoDatos As New AccesoDatos

        'Cargo combo de Localidad
        mYAccesoDatos.traer_valores_combo(Me.cmbLocalidad, Constantes.Tabla_AREAS_GEOGRAFICAS)
        ' Cargo Combo de Tipos de Documentos
        myAccesoDatos.traer_valores_combo(Me.cmbTipoDocumento, Constantes.Tabla_TIPOS_DOCUMENTOS)
        'Cargo Combo de Estado de Cliente
        myAccesoDatos.traer_valores_combo_Estado_Cliente(Me.cmbEstadoCliente)

        Me.buscar("")

    End Sub

    Public Sub New(ByRef form As frmPrincipal)

        Me.InitializeComponent()

        _formPrincipal = form

    End Sub

    Private Sub cmdBuscar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdBuscar.Click
        Dim where As New String("")

        If utilidades.validarRangoDeEdades(txtEdadDesde, txtEdadHasta) = False Then
            Exit Sub
        End If

        Me.buscar(armarWhereConsulta)
    End Sub
    Public Sub buscar(ByVal where As String)
        Dim myAccesoDatos As New AccesoDatos
        Dim myConsulta As String

        myConsulta = "SELECT C.ID AS NRO_CLIENTE, TD.DESCRIPCION AS TIPO_DOCUMENTO, C.NRO_DOCUMENTO AS NRO_DOCUMENTO, " & _
                "(C.APELLIDO + ', ' + C.NOMBRE) AS APELLIDO_NOMBRE, CASE WHEN dateadd" & _
                "(year, datediff (year, C.FECHA_NACIMIENTO, getDate()), C.FECHA_NACIMIENTO) > getDate() THEN datediff " & _
                "(year, C.FECHA_NACIMIENTO, getDate()) - 1 ELSE datediff (year, C.FECHA_NACIMIENTO, getDate()) END AS EDAD, " & _
                "AG.DESCRIPCION AS LOCALIDAD, EC.DESCRIPCION AS ESTADO " & _
                "FROM CLIENTES C INNER JOIN TIPOS_DOCUMENTOS TD ON (C.ID_TIPO_DOCUMENTO = TD.ID) " & _
                    "INNER JOIN ESTADOS_CLIENTES EC ON (C.ID_ESTADO_CLIENTE = EC.ID) " & _
                    "INNER JOIN DIRECCIONES D ON (C.ID_DIRECCION = D.ID) " & _
                    "INNER JOIN AREAS_GEOGRAFICAS AG ON (AG.ID = D.ID_LOCALIDAD) " & _
                "WHERE 1 = 1 "

        If Not where.Trim = "" Then
            myConsulta = myConsulta + where
        End If

        Me.gridClientes.DataSource = myAccesoDatos.ejecutarConsulta(myConsulta)

        Me.habilitarBotonesSegunGrilla()

    End Sub
    Public Function armarWhereConsulta() As String
        Dim where As New String("")

        'FECHA DESDE - FECHA HASTA
        Dim fechaDesde = txtEdadDesde.Text().Trim()
        Dim fechaHasta = txtEdadDesde.Text().Trim()

        If Not fechaHasta = "" Then
            fechaHasta = Convert.ToString(Convert.ToInt32(txtEdadHasta.Text().Trim()) + 1)
        End If

        If Not (fechaDesde = "" Or fechaHasta = "") Then

            fechaDesde = Format(Today.AddYears(Convert.ToInt32(-fechaDesde)), "dd/MM/yyyy")
            fechaDesde = utilidades.obtenerFechaFormatoSQLServer2008(fechaDesde)

            fechaHasta = Format(Today.AddYears(Convert.ToInt32(-fechaHasta)), "dd/MM/yyyy")
            fechaHasta = utilidades.obtenerFechaFormatoSQLServer2008(fechaHasta)

            where = where + " AND C.FECHA_NACIMIENTO BETWEEN '" + fechaHasta + "' AND '" + fechaDesde + "'"
        End If

        'COMBO TIPO DOCUMENTO
        If Me.cmbTipoDocumento.SelectedIndex > 0 Then
            where = where + " AND C.ID_TIPO_DOCUMENTO = " + Convert.ToString(cmbTipoDocumento.SelectedValue)
        End If

        'TEXT NRO DOCUMENTO
        If Not (txtNumeroDocumento.Text().Trim() = "") Then
            where = where + " AND C.NRO_DOCUMENTO = " + txtNumeroDocumento.Text().Trim()
        End If

        ' COMBO ESTADO CLIENTE
        If cmbEstadoCliente.SelectedIndex > 0 Then
            where = where + " AND C.ID_ESTADO_CLIENTE = " + Convert.ToString(cmbEstadoCliente.SelectedValue)
        End If

        'TEXT APELLIDO
        If Not (txtApellidoCliente.Text().Trim() = "") Then
            where = where + " AND UPPER(C.APELLIDO) LIKE UPPER('%" + txtApellidoCliente.Text().Trim() + "%')"
        End If

        ' TEXT NOMBRE
        If Not (txtNombreCliente.Text().Trim() = "") Then
            where = where + " AND UPPER(C.NOMBRE) LIKE UPPER('%" + txtNombreCliente.Text().Trim() + "%')"
        End If

        ' COMBO LOCALIDAD
        If cmbLocalidad.SelectedIndex > 0 Then
            where = where + " AND D.ID_LOCALIDAD = " + Convert.ToString(cmbLocalidad.SelectedValue)
        End If

        Return where
    End Function

    Private Sub cmdNuevo_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdNuevo.Click
        Dim frmClientes As New frmClientes(Constantes.Ventana_Tipo_Apertura_Nuevo, _formPrincipal)
        frmClientes.ShowDialog()
    End Sub

    Private Sub cmdModificar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdModificar.Click
        Dim filaSeleccionada As DataGridViewRow
        Dim idCliente As New String("")
        For Each filaSeleccionada In gridClientes.SelectedRows
            idCliente = Convert.ToString(filaSeleccionada.Cells(0).Value)
        Next
        Dim frmClientes As New frmClientes(Constantes.Ventana_Tipo_Apertura_Edicion, _formPrincipal)
        frmClientes.idCliente = idCliente
        frmClientes.ShowDialog()
    End Sub

    Private Sub cmdVer_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdVer.Click
        Dim filaSeleccionada As DataGridViewRow
        Dim idCliente As New String("")
        For Each filaSeleccionada In gridClientes.SelectedRows
            idCliente = Convert.ToString(filaSeleccionada.Cells(0).Value)
        Next

        Dim frmClientes As New frmClientes(Constantes.Ventana_Tipo_Apertura_Detalle, _formPrincipal)
        frmClientes.idCliente = idCliente
        frmClientes.ShowDialog()

    End Sub

    Private Sub cmdBorrar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdBorrar.Click

        If MessageBox.Show("¿Está seguro que desea eliminar este Cliente?", "Importante", MessageBoxButtons.OKCancel, MessageBoxIcon.Question) = Windows.Forms.DialogResult.OK Then

            Dim myAccesoDatos As New AccesoDatos
            Dim filaSeleccionada As DataGridViewRow
            Dim idCliente As New String("")
            Dim consultaBorrar As String
            Dim tabla As New Data.DataTable

            For Each filaSeleccionada In gridClientes.SelectedRows
                idCliente = Convert.ToString(filaSeleccionada.Cells(0).Value)
            Next

            ' Si el cliente tiene Solicitudes de Préstamos no se puede eliminar

            consultaBorrar = "SELECT * FROM SOLICITUDES_PRESTAMOS WHERE ID_CLIENTE = " & idCliente
            tabla = myAccesoDatos.ejecutarConsulta(consultaBorrar)

            If (tabla.Rows.Count > 0) Then
                MsgBox("El cliente se encuentra asociado a otros Registros. No es posible su eliminación.", vbOKOnly + vbCritical, "Atención")

            Else
                Dim myConsulta As String
                myConsulta = "DELETE FROM TELEFONOS_CLIENTE WHERE ID_CLIENTE = " + idCliente
                myAccesoDatos.ejecutarConsulta(myConsulta)
                myConsulta = "DELETE FROM EMPLEOS_CLIENTES WHERE ID_CLIENTE = " + idCliente
                myAccesoDatos.ejecutarConsulta(myConsulta)
                myConsulta = "DELETE FROM BIENES_MUEBLES WHERE ID_CLIENTE = " + idCliente
                myAccesoDatos.ejecutarConsulta(myConsulta)
                myConsulta = "DELETE FROM BIENES_INMUEBLES WHERE ID_CLIENTE = " + idCliente
                myAccesoDatos.ejecutarConsulta(myConsulta)
                myConsulta = "DELETE FROM CLIENTES WHERE ID = " & idCliente
                myAccesoDatos.ejecutarConsulta(myConsulta)
                Me.buscar(armarWhereConsulta)
            End If
        End If
    End Sub

    Public Sub habilitarBotonesSegunGrilla()

        If Me.gridClientes.RowCount < 1 Then
            Me.cmdModificar.Enabled = False
            Me.cmdVer.Enabled = False
            Me.cmdBorrar.Enabled = False
            Me.cmdReport.Enabled = False
        Else
            Me.cmdModificar.Enabled = True
            Me.cmdBorrar.Enabled = True
            Me.cmdVer.Enabled = True
            Me.cmdReport.Enabled = True
        End If
    End Sub

    Private Sub frmGestionClientes_FormClosing(ByVal sender As Object, ByVal e As System.Windows.Forms.FormClosingEventArgs) Handles Me.FormClosing
        utilidades.confirmarSalirDelFormulario(e)
    End Sub

    Private Sub cmdSalir_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdSalir.Click
        Me.Close()
    End Sub

    Private Sub txtNumeroDocumento_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles txtNumeroDocumento.KeyPress
        utilidades.validarKeyPressNumerico(e)
    End Sub

    Private Sub txtEdadDesde_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles txtEdadDesde.KeyPress
        utilidades.validarKeyPressNumerico(e)
    End Sub

    Private Sub txtEdadHasta_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles txtEdadHasta.KeyPress
        utilidades.validarKeyPressNumerico(e)
    End Sub

    Private Sub cmdReport_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdReport.Click
        Dim report As New rptClientes
        Dim ds As New dsClientes
        Dim myAccesoDatos As New AccesoDatos
        Dim myConsulta As String

        myConsulta = "SELECT C.ID AS NRO_CLIENTE, TD.DESCRIPCION AS TIPO_DOCUMENTO, C.NRO_DOCUMENTO AS NRO_DOCUMENTO, " & _
                "(C.APELLIDO + ', ' + C.NOMBRE) AS APELLIDO_NOMBRE, CASE WHEN dateadd" & _
                "(year, datediff (year, C.FECHA_NACIMIENTO, getDate()), C.FECHA_NACIMIENTO) > getDate() THEN datediff " & _
                "(year, C.FECHA_NACIMIENTO, getDate()) - 1 ELSE datediff (year, C.FECHA_NACIMIENTO, getDate()) END AS EDAD, " & _
                "AG.DESCRIPCION AS LOCALIDAD, EC.DESCRIPCION AS ESTADO " & _
                "FROM CLIENTES C INNER JOIN TIPOS_DOCUMENTOS TD ON (C.ID_TIPO_DOCUMENTO = TD.ID) " & _
                    "INNER JOIN ESTADOS_CLIENTES EC ON (C.ID_ESTADO_CLIENTE = EC.ID) " & _
                    "INNER JOIN DIRECCIONES D ON (C.ID_DIRECCION = D.ID) " & _
                    "INNER JOIN AREAS_GEOGRAFICAS AG ON (AG.ID = D.ID_LOCALIDAD) " & _
                "WHERE 1 = 1 "

        Dim where As New String("")
        where = armarWhereConsulta()

        If Not where.Trim = "" Then
            myConsulta = myConsulta + where
        End If

        myAccesoDatos.ejecutarConsultaInforme(myConsulta, ds.Cliente)
        report.SetDataSource(ds)

        Dim frmReportClientes As New frmReportClientes
        frmReportClientes.crvCliente.ReportSource = report
        frmReportClientes.ShowDialog()

    End Sub
End Class